package com.thinvent.remotepassword.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.api.ApiController;
import com.baomidou.mybatisplus.extension.api.R;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.thinvent.remotepassword.entity.WikiDoc;
import com.thinvent.remotepassword.service.WikiDocService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.io.IOException;
import java.io.Serializable;

/**
 * 知识库文档表(WikiDoc)表控制层
 *
 * @author makejava
 * @since 2024-07-09 15:31:27
 */
@RestController
@RequestMapping("wikiDoc")
public class WikiDocController extends ApiController {

    /**
     * 服务对象
     */
    @Resource
    private WikiDocService wikiDocService;

    /**
     * 分页查询所有数据
     *
     * @param page 分页对象
     * @param wikiDoc 查询实体
     * @return 所有数据
     */
    @GetMapping("/selectAll")
    public R selectAll(Page<WikiDoc> page, WikiDoc wikiDoc) {
        QueryWrapper<WikiDoc> wikiDocQueryWrapper = new QueryWrapper<>();
        if(StringUtils.isNotBlank(wikiDoc.getCategoryId())) {
            wikiDocQueryWrapper.eq("category_id",wikiDoc.getCategoryId());
        }
        return success(this.wikiDocService.page(page, wikiDocQueryWrapper));
    }
    @GetMapping("/getAll")
    public R getAll() {
        return success(this.wikiDocService.list());
    }
    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */
    @GetMapping("{id}")
    public R selectOne(@PathVariable Serializable id) {
        return success(this.wikiDocService.getById(id));
    }

    /**
     * 新增数据
     *
     * @param wikiDoc 实体对象
     * @return 新增结果
     */
    @PostMapping("/insert")
    public R insert(@RequestBody WikiDoc wikiDoc) {
        return success(this.wikiDocService.save(wikiDoc));
    }

    /**
     * 修改数据
     *
     * @param wikiDoc 实体对象
     * @return 修改结果
     */
    @PostMapping("/update")
    public R update(@RequestBody WikiDoc wikiDoc) {
        return success(this.wikiDocService.updateById(wikiDoc));
    }

    /**
     * 删除数据
     *
     * @param id 主键结合
     * @return 删除结果
     */
    @PostMapping("/delete")
    public R delete(@RequestParam("id") String id) {
        WikiDoc byId = this.wikiDocService.getById(id);
        String osName = System.getProperty("os.name").toLowerCase();
        // linux服务器
        if(osName.contains("linux")) {
            // 删除文件
            String filePath = byId.getPath(); // 替换为你要删除的文件的实际路径

            try {
                // 构建命令
                String command = "rm -f " + filePath;

                // 使用Runtime.exec执行命令
                Process process = Runtime.getRuntime().exec(command);

                // 等待命令执行完成
                int exitCode = process.waitFor();
                if (exitCode == 0) {
                    System.out.println("文件删除成功");
                } else {
                    System.err.println("文件删除失败，退出码: " + exitCode);
                }
            } catch (IOException | InterruptedException e) {
                e.printStackTrace();
                System.err.println("删除文件时发生错误: " + e.getMessage());
            }
        }
        // windows服务器
        if(osName.contains("win")) {
            String filePath = byId.getPath(); // 替换为你要删除的文件的实际路径

            try {
                // 构建命令，注意Windows命令使用反斜杠作为路径分隔符，但在Java字符串中需要转义
                String command = "cmd /c del " + filePath.replace("\\", "\\\\");

                // 使用Runtime.exec执行命令
                Process process = Runtime.getRuntime().exec(command);

                // 等待命令执行完成
                int exitCode = process.waitFor();
                if (exitCode == 0) {
                    System.out.println("文件删除成功");
                } else {
                    System.err.println("文件删除失败，退出码: " + exitCode);
                }
            } catch (IOException | InterruptedException e) {
                e.printStackTrace();
                System.err.println("删除文件时发生错误: " + e.getMessage());
            }
        }
        return success(this.wikiDocService.removeById(id));
    }
}

